package com.smh.operator;

import org.junit.Test;
/**
 * @description: 运算符测试
 * @author: shenmhk
 * @create: 2020-10-20 18:12
 */
public class OperatorTest {

    /**
     * &&逻辑与
     */
    @Test
    public void test1(){
        int a = 5;
        int b = 10;
        if (a>6 && b++>10){
            System.out.println("全部都为真");
        }
        System.out.println("a=" + a + ",b=" + b);
    }

    /**
     * &按位与
     */
    @Test
    public void test2(){
        int a = 5;
        int b = 10;
        //这里将&&替换成&，虽然作用和&&一样，但不会造成段路，&左右都要判断
        if (a>6 & b++>10){
            System.out.println("全部都为真");
        }
        System.out.println("a=" + a + ",b=" + b);
    }

    /**
     * || 逻辑或
     * 一个为真则为真，后续不需要再计算，一个为假再计算右边的表达式
     */
    @Test
    public void test3(){
        int a = 5;
        int b = 10;
        if (a>4 || b++>10){
            System.out.println("a=" + a + ",b=" + b);
        }
    }
    /**
     * | 按位或
     * 不短路或，作用和||相同，但是不会短路
     */
    @Test
    public void test4(){
        int a = 5;
        int b = 10;
        //这里将||替换成|
        if (a>4 | b++>10){
            System.out.println("a=" + a + ",b=" + b);
        }
    }
    /**
     * ^ 异或
     */
    @Test
    public void test5(){
        System.out.println("5 ^ 9 = "+(5 ^ 9));
    }

    /**
     * << 左移运算符
     */
    @Test
    public void test6(){
        System.out.println("5 << 2 = "+(5<<2));
    }

    /**
     * >> 右移运算符
     */
    @Test
    public void test7(){
        System.out.println("5 >> 2 = "+(5>>2));
    }
}
